// Copyright (c) 2012, yuno. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
//    this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
//    this list of conditions and the following disclaimer in the documentation
//    and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of contributors
//    may be used to endorse or promote products derived from this software
//    without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
package sugarmintcandy.widgetwindow;

import java.util.Arrays;
import java.util.Collections;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class WindowInfoListAdapter extends BaseAdapter {
    private MainDatabase mDatabase;
    private WindowInfo[] mInfoList;
    private int mCurrentWorkspace;

    public WindowInfoListAdapter(MainDatabase database) {
	this.mDatabase = database;
	refresh();
    }

    public void refresh() {
	mInfoList = mDatabase.getWindowInfoList();
	Collections.reverse(Arrays.asList(mInfoList));
	SharedPreferences prefs = PreferenceManager
		.getDefaultSharedPreferences(mDatabase.getContext());
	mCurrentWorkspace = prefs.getInt(PreferenceKeys.CURRENT_WORKSPACE, 0);
	notifyDataSetChanged();
    }

    @Override
    public int getCount() {
	return mInfoList.length;
    }

    @Override
    public WindowInfo getItem(int position) {
	return mInfoList[position];
    }

    @Override
    public long getItemId(int position) {
	return mInfoList[position].appWidgetId;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
	Context context = parent.getContext();
	if (view == null) {
	    LayoutInflater inflater = LayoutInflater.from(context);
	    view = inflater.inflate(R.layout.window_list_item, parent, false);
	}
	WindowInfo info = mInfoList[position];
	boolean visible = (info.workspace & (1 << mCurrentWorkspace)) != 0;
	View titleBarColor = view.findViewById(R.id.title_bar);
	titleBarColor.setBackgroundColor(info.titleBarColor);
	ImageView imageView = (ImageView) view.findViewById(R.id.image_view);
	imageView.setBackgroundColor(info.windowColor);
	imageView.setImageDrawable(info.loadIcon(context));
	TextView textView = (TextView) view.findViewById(R.id.text_view);
	textView.setText(info.getTitleBarText());
	ColorStateList textColor = textView.getTextColors();
	textView.setTextColor(textColor.withAlpha(visible ? 255 : 128));
	return view;
    }

    public WindowInfo findItemById(long id) {
	for (WindowInfo info : mInfoList) {
	    if (info.appWidgetId == id) {
		return info;
	    }
	}
	return null;
    }
}
